﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.ServiceModel.DomainServices.Client;
using System.Collections.Generic;
using Biciq.Datos;
using System.Linq;
using System.ComponentModel;
using System.IO;
using System.Windows.Media.Imaging;
using Biciq.Silverlight.UI.Clases;
namespace Biciq.Silverlight.UI
{
    public class UsuariosPermanentesVistaModelo:VistaModeloBase
    {
        #region Constructores
        public UsuariosPermanentesVistaModelo()
        {
            InicializarMensajesError();
            Procesando = true;
            ListaPaises = CacheCliente.ListaPaises;
            ListaTipoSuscripcion = CacheCliente.ListaTipoSuscripcion;
            BuscarRegistrados();
        }
        #endregion

        #region Campos
        private string _estadoCliente;
        private string _numeroUsuariosActivos;
        private string _numeroUsuariosRegistrados;
        private string _numeroUsuariosRechazados;
        private string _numeroUsuariosAprobados;
        private string _numeroUsuariosCaducados;


       /// <summary>
       /// Metodo que muestra la lista de Clientes.
       /// </summary>
        private List<Cliente> _listaClientes;
        private string _tituloPanel;
        private string _fondoPanel;
        private string _letraPanel;
        private Cliente _clienteSeleccionado;
        private List<Pai> _listaPaises;
        private List<TipoSuscripcion> _listaTipoSuscripcion;
        private Pai _paisSeleccionado;
        private TipoSuscripcion _tipoSuscripcionSeleccionado;
        private string _valor;
        private DateTime _fechaCaducidad;
        private RechazoClienteVistaModelo _rechazoClienteVistaModelo;
        private RechazoClienteVista _rechazoClienteVista;

        private GenerarTarjetaVistaModelo _generarTarjetaVistaModelo;
        private GenerarTarjetaVista _generarTarjetaVista;

        private BloquearInscripcionVista _bloquearInscripcionVista;
        private BloquearInscripcionVistaModelo _bloquearInscripcionVistaModelo;

        /// <summary>
        /// Texto estado.
        /// </summary>
        private string _status;
        private string _foto;
        private BitmapImage _imagen;
        private Visibility _mostrarAbrir;

        private Visibility _mostrarGenerar;

        private Visibility _mostrarAprobar;
        private Visibility _mostrarFacturar;

        private Visibility _mostrarActualizar;


        private SeguimientoChildVista _seguimientoVista;
        private SeguimientoVistaModelo _seguimientoVistaModelo;

        private Visibility _mostrarReimprimirSC;

      

       
        
        

        #endregion

        #region Propiedades


        /// <summary>
        /// Texto Usuarios Caducados.
        /// </summary>
        public string NumeroUsuariosCaducados
        {
            get { return _numeroUsuariosCaducados; }
            set {
                
                _numeroUsuariosCaducados = value;
                RaisePropertyChanged("NumeroUsuariosCaducados");
            
            }
        }

        public Visibility MostrarReimprimirSC
        {
            get { return _mostrarReimprimirSC; }
            set
            {
                _mostrarReimprimirSC = value;
                RaisePropertyChanged("MostrarReimprimirSC");
            }
        }


        public Visibility MostrarActualizar
        {
            get { return _mostrarActualizar; }
            set
            {
                _mostrarActualizar = value;
                RaisePropertyChanged("MostrarActualizar");
            }
        }


        public Visibility MostrarFacturar
        {
            get { return _mostrarFacturar; }
            set
            {
                _mostrarFacturar = value;
                RaisePropertyChanged("MostrarFacturar");
            }
        }
        public Visibility MostrarAprobar
        {
            get { return _mostrarAprobar; }
            set
            {
                _mostrarAprobar = value;
                RaisePropertyChanged("MostrarAprobar");
            }
        }
     
        /// <summary>
        ///  Texro Usuarios Aprobados
        /// </summary>
        public string NumeroUsuariosAprobados
        {
            get { return _numeroUsuariosAprobados; }
            set
            {
                _numeroUsuariosAprobados = value;
                RaisePropertyChanged("NumeroUsuariosAprobados");
            }
        }

        public Visibility MostrarGenerar
        {
            get { return _mostrarGenerar; }
            set
            { 
                _mostrarGenerar = value;
                RaisePropertyChanged("MostrarGenerar");
            }
        }


        public Visibility MostrarAbrir
        {
            get { return _mostrarAbrir; }
            set 
            { 
                _mostrarAbrir = value;
                RaisePropertyChanged("MostrarAbrir");
            }
        }
        public BitmapImage Imagen
        {
            get { return _imagen; }
            set 
            { 
                _imagen = value;
                RaisePropertyChanged("Imagen");
            }
        }
        /// <summary>
        /// Texto Foto 
        /// </summary>
        public string Foto
        {
            get { return _foto; }
            set 
            { 
                _foto = value;
                RaisePropertyChanged("Foto");
            }
        }
        
        public string Status
        {
            get { return _status; }
            set
            {
                _status = value;
                RaisePropertyChanged("Status");

            }
        }
        /// <summary>
        /// Metodo de fecha de Caducidad de suscripción.
        /// </summary>
        public DateTime FechaCaducidad
        {
            get { return _fechaCaducidad; }
            set
            {
                _fechaCaducidad = value;
                RaisePropertyChanged("FechaCaducidad");
            }
        }
        /// <summary>
        /// Texto Valor.
        /// </summary>
        public string Valor
        {
            get { return _valor; }
            set
            {
                _valor = value;
                RaisePropertyChanged("Valor");
            }
        }
        /// <summary>
        /// Metodo que indica el tipo de suscripción 
        /// </summary>
        public TipoSuscripcion TipoSuscripcionSeleccionado
        {
            get { return _tipoSuscripcionSeleccionado; }
            set
            {
                _tipoSuscripcionSeleccionado = value;
                RaisePropertyChanged("TipoSuscripcionSeleccionado");
                if (TipoSuscripcionSeleccionado != null)
                {
                    BiciqContexto.ObtenerValorSuscripcion(TipoSuscripcionSeleccionado.Id).Completed += (o, ev) =>
                    {
                        Valor = ((InvokeOperation<string>)o).Value;


                        if (TipoSuscripcionSeleccionado.Id == Guid.Parse( "89b84081-c2a6-4b15-99d1-37fd23968ab0"))
                        {
                            FechaCaducidad = DateTime.Now.AddDays(31);
                        }
                        else
                        {
                            FechaCaducidad = DateTime.Now.AddDays(365);

                        }
                        ClienteSeleccionado.TipoSuscripcionId = TipoSuscripcionSeleccionado.Id;
                        Procesando = false;
                    };
                }
            }
        }
        /// <summary>
        /// Metoto que muestra el tipo de suscripción.
        /// </summary>
        public List<TipoSuscripcion> ListaTipoSuscripcion
        {
            get { return _listaTipoSuscripcion; }
            set
            {
                _listaTipoSuscripcion = value;
                RaisePropertyChanged("ListaTipoSuscripcion");
            }
        }
        /// <summary>
        /// Metodo que selecciona el Pais del usuario.
        /// </summary>
        public Pai PaisSeleccionado
        {
            get { return _paisSeleccionado; }
            set
            {
                _paisSeleccionado = value;
                RaisePropertyChanged("PaisSeleccionado");
                if (PaisSeleccionado != null)
                {
                    ClienteSeleccionado.PaisId = PaisSeleccionado.id;
                }
            }
        }


        
        /// <summary>
        /// Metodo que muestra la lista de paises.
        /// </summary>
        public List<Pai> ListaPaises
        {
            get { return _listaPaises; }
            set 
            { 
                _listaPaises = value;
                RaisePropertyChanged("ListaPaises");
            }
        }
        public Cliente ClienteSeleccionado
        {
            get { return _clienteSeleccionado; }
            set
            {
                _clienteSeleccionado = value;
                
                RaisePropertyChanged("ClienteSeleccionado");
                if (_clienteSeleccionado != null)
                {
                    Procesando = true;
                    PaisSeleccionado = ListaPaises.Where(c => c.id == _clienteSeleccionado.PaisId).FirstOrDefault();
                    TipoSuscripcionSeleccionado = ListaTipoSuscripcion.Where(t => t.Id == _clienteSeleccionado.TipoSuscripcionId).FirstOrDefault();
                    if (ClienteSeleccionado.Foto == null || ClienteSeleccionado.Foto == "")
                    {
                        MostrarAbrir = Visibility.Visible;
                        Imagen = null;
                        Foto = null;
                    }
                    else
                    {
                        MostrarAbrir = Visibility.Collapsed;
                        Uri uriImage = new Uri(ClienteSeleccionado.Foto);

                        Imagen = new BitmapImage(uriImage);
                        Foto = ClienteSeleccionado.Foto;
                        


                    }
                }

            }
        }


        public string LetraPanel
        {
            get { return _letraPanel; }
            set 
            { 
                _letraPanel = value;
                RaisePropertyChanged("LetraPanel");
            }
        }
        public string FondoPanel
        {
            get { return _fondoPanel; }
            set 
            { 
                _fondoPanel = value;
                RaisePropertyChanged("FondoPanel");
            }
        }
        public string TituloPanel
        {
            get { return _tituloPanel; }
            set
            {
                _tituloPanel = value;
                RaisePropertyChanged("TituloPanel");
            }
        }
        /// <summary>
        /// Metodo que muestra la lista de clientes.
        /// </summary>
        public List<Cliente> ListaClientes
        {
            get { return _listaClientes; }
            set 
            { 
                _listaClientes = value;
                RaisePropertyChanged("ListaClientes");
            }
        }
        /// <summary>
        /// Metodo que muestra la lista de usuarios rechazados.
        /// </summary>
        public string NumeroUsuariosRechazados
        {
            get { return _numeroUsuariosRechazados; }
            set 
            { 
                _numeroUsuariosRechazados = value;
                RaisePropertyChanged("NumeroUsuariosRechazados");
            }
        }

        public string NumeroUsuariosRegistrados
        {
            get { return _numeroUsuariosRegistrados; }
            set
            { 
                _numeroUsuariosRegistrados = value;
                RaisePropertyChanged("NumeroUsuariosRegistrados");
            }
        }
        /// <summary>
        /// Texto de Usuarios Activos.
        /// </summary>
        public string NumeroUsuariosActivos
        {
            get { return _numeroUsuariosActivos; }
            set 
            { 
                _numeroUsuariosActivos = value;
                RaisePropertyChanged("NumeroUsuariosActivos");
            }
        }
        /// <summary>
        /// Indica el Tipo de Cliente seleccionado
        /// </summary>
        public string EstadoCliente
        {
            get { return _estadoCliente; }
            set 
            { 
                _estadoCliente = value;
                RaisePropertyChanged("TipoCliente");
            }
        }

        
        #endregion

        #region Métodos Sobreescritos
        public override void Buscar()
        {
            
                BiciqContexto.ObtenerNumeroUsuarios().Completed += (o, ev) =>
                    {
                        ClienteSeleccionado = null;
                        Foto = null;
                        Imagen = null;
                        var mensajes = ((InvokeOperation<IEnumerable<string>>)o).Value.ToList();
                        NumeroUsuariosRegistrados = mensajes[0];
                        NumeroUsuariosActivos = mensajes[1];
                        NumeroUsuariosRechazados = mensajes[2];
                        NumeroUsuariosAprobados = mensajes[3];
                        NumeroUsuariosCaducados = mensajes[4];



                        BiciqContexto.Clientes.Clear();
                        if (Busqueda == null || Busqueda == "")
                        {
                            
                            //BiciqContexto.Load(BiciqContexto.BuscarClientesPorEstadoQuery(EstadoCliente)).Completed += delegate
                            //{
                            //    ListaClientes = BiciqContexto.Clientes.ToList();
                            //    foreach (var item in ListaClientes)
                            //    {
                            //        ((INotifyPropertyChanged)item).PropertyChanged += new PropertyChangedEventHandler(UsuariosPermanentesVistaModelo_PropertyChanged);
                            //    }
                                Procesando = false;
                            //};
                        }
                        else
                        {
                            BiciqContexto.Load(BiciqContexto.FullTextSearchClienteQuery(Busqueda, EstadoCliente)).Completed += delegate
                            {
                                ListaClientes = BiciqContexto.Clientes.ToList();
                                foreach (var item in ListaClientes)
                                {
                                    ((INotifyPropertyChanged)item).PropertyChanged += new PropertyChangedEventHandler(UsuariosPermanentesVistaModelo_PropertyChanged);
                                }
                                Procesando = false;
                            };
                        }
                        Busqueda = "";
                    };
            
        }

        void UsuariosPermanentesVistaModelo_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            IsDirty = true;
        }
        #endregion

        #region Comandos
        private RelayCommand _comandoBuscarActivos;
        private RelayCommand _comandoBuscarAprobados;
        private RelayCommand _comandoBuscarRegistrados;
        private RelayCommand _comandoBuscarRechazados;

        private RelayCommand _comandoBuscarCaducados;
        private RelayCommand _comandoAprobar;
        private RelayCommand _comandoRechazar;
        private RelayCommand _comandoAgregarFoto;
        private RelayCommand _comandoGenerar;
        private RelayCommand _comandoFacturar;
        private RelayCommand _comandoBloquear;

        private RelayCommand _comandoActualizar;
        private RelayCommand _comandoHistorial;

        private RelayCommand _comandoReimprimir;

        public RelayCommand ComandoReimprimir
        {
            get
            {
                if (_comandoReimprimir == null)
                {
                    _comandoReimprimir = new RelayCommand
                    (
                        p => ReimprimirTarjeta()
                    );
                }
                return _comandoReimprimir;
            }
        }

        public RelayCommand ComandoHistorial
        {
            get
            {
                if (_comandoHistorial == null)
                {
                    _comandoHistorial = new RelayCommand
                    (
                        p => VerHistorial()
                    );
                }
                return _comandoHistorial;
            }
        }

        public RelayCommand ComandoGenerar
        {
            get
            {
                if (_comandoGenerar == null)
                {
                    _comandoGenerar = new RelayCommand
                    (
                        p => FacturarTarjeta()
                    );
                }
                return _comandoGenerar;
            }
        }

        public RelayCommand ComandoFacturar
        {
            get
            {
                if (_comandoFacturar == null)
                {
                    _comandoFacturar = new RelayCommand
                    (
                        p => Facturar()
                    );
                }
                return _comandoFacturar;
            }
        }



        public RelayCommand ComandoActualizar
        {
            get
            {
                if (_comandoActualizar == null)
                {
                    _comandoActualizar = new RelayCommand
                    (
                        p => Actualizar()
                    );
                }
                return _comandoActualizar;
            }

        }
        public RelayCommand ComandoAgregarFoto
        {
           get
            {
                if (_comandoAgregarFoto == null)
                {
                    _comandoAgregarFoto = new RelayCommand
                    (
                        p => AgregarFoto()
                    );
                }
                return _comandoAgregarFoto;
            }
        }


        public RelayCommand ComandoBloquear
        {
            get
            {
                if (_comandoBloquear == null)
                {
                    _comandoBloquear = new RelayCommand
                    (
                        p => BloquearInscripcion()
                    );
                }
                return _comandoBloquear;
            }
        }

        public RelayCommand ComandoAprobar
        {
            get
            {
                if (_comandoAprobar == null)
                {
                    _comandoAprobar = new RelayCommand
                    (
                        p => AprobarCliente()
                    );
                }
                return _comandoAprobar;
            }
        }

        public RelayCommand ComandoRechazar
        {
            get
            {
                if (_comandoRechazar == null)
                {
                    _comandoRechazar = new RelayCommand
                    (
                        p => RechazarCliente()
                    );
                }
                return _comandoRechazar;
            }
        }


        public RelayCommand ComandoBuscarActivos
        {
            get
            {
                if (_comandoBuscarActivos == null)
                {
                    _comandoBuscarActivos = new RelayCommand
                    (
                        p => BuscarActivos()
                    );
                }
                return _comandoBuscarActivos;
            }
        }

        public RelayCommand ComandoBuscarCaducados
        {
            get
            {
                if (_comandoBuscarCaducados == null)
                {
                    _comandoBuscarCaducados = new RelayCommand
                    (
                        p => BuscarCaducados()
                    );
                }
                return _comandoBuscarCaducados;
            }
        }

        public RelayCommand ComandoBuscarAprobados
        {
            get
            {
                if (_comandoBuscarAprobados == null)
                {
                    _comandoBuscarAprobados = new RelayCommand
                    (
                        p => BuscarAprobados()
                    );
                }
                return _comandoBuscarAprobados;
            }
        }
        public RelayCommand ComandoBuscarRegistrados
        {
            get
            {
                if (_comandoBuscarRegistrados == null)
                {
                    _comandoBuscarRegistrados = new RelayCommand
                    (
                        p => BuscarRegistrados()
                    );
                }
                return _comandoBuscarRegistrados;
            }
        }
        public RelayCommand ComandoBuscarRechazados
        {
            get
            {
                if (_comandoBuscarRechazados == null)
                {
                    _comandoBuscarRechazados = new RelayCommand
                    (
                        p => BuscarRechazados()
                    );
                }
                return _comandoBuscarRechazados;
            }
        }
        #endregion

        #region Métodos Privados
        private void FacturarTarjeta()
        {

            if (ClienteSeleccionado != null)
            {
                Procesando = true;
                ClienteSeleccionado.NombresApellidos = ClienteSeleccionado.Nombres + " " + ClienteSeleccionado.Apellidos;
                ClienteSeleccionado.Foto = Foto;
                BiciqContexto.SubmitChanges().Completed += delegate
                {
                    Procesando = false;
                    FacturacionVista vista = new FacturacionVista();
                    FacturacionVistaModelo vistaModelo = new FacturacionVistaModelo(ClienteSeleccionado,true);
                    vista.DataContext = vistaModelo;
                    var Principal = (PrincipalVista)Application.Current.RootVisual;
                    Principal.LimpiarCanvas();
                    Principal.canvasBody.Content = vista;
                };

            }
            else
            {
                LogicStudio.Framework.UI.Controles.CuadroDialogo.Mostrar("No se puede Generar Tarjeta", "Debe seleccionar un Usuario para realizar la generación", LogicStudio.Framework.UI.Utilidades.TipoVentana.Advertencia);
            }

        }
        
        private void GenerarTarjeta()
        {
         
            _generarTarjetaVista = new GenerarTarjetaVista();
            _generarTarjetaVistaModelo = new GenerarTarjetaVistaModelo(ClienteSeleccionado, Visibility.Visible);
            _generarTarjetaVista.DataContext = _generarTarjetaVistaModelo;

            _generarTarjetaVistaModelo.EventoCerrarEditor += delegate
            {
                
                _generarTarjetaVista.Close();
            };

            _generarTarjetaVista.Show();

        }
        private void ReimprimirTarjeta()
        {

            _generarTarjetaVista = new GenerarTarjetaVista();
            _generarTarjetaVistaModelo = new GenerarTarjetaVistaModelo(ClienteSeleccionado, Visibility.Visible, true);
            _generarTarjetaVista.DataContext = _generarTarjetaVistaModelo;

            _generarTarjetaVistaModelo.EventoCerrarEditor += delegate
            {

                _generarTarjetaVista.Close();
            };

            _generarTarjetaVista.Show();

        }

        private void AgregarFoto()
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Multiselect = false;
            dlg.Filter = "Png (*.png)|*.png|Jpg (*.jpg)|*.jpg|Gif (*.gif)|*.gif";

            bool? retval = dlg.ShowDialog();

            if (retval != null && retval == true)
            {
                FileInfo fi = dlg.File;
                 if (fi != null)
                 {
                 using (Stream stream = fi.OpenRead())
                 {
                 
                 Imagen = new BitmapImage();
                 Imagen.SetSource(stream);

                 }

                 }
                UploadFile(ClienteSeleccionado.Id.ToString()+dlg.File.Extension, dlg.File.OpenRead());
                Status = dlg.File.Extension;
            }
            else
            {
                Status = "No file selected...";
            }
        }
        private void UploadFile(string fileName, Stream data)
        {

            UriBuilder ub = new UriBuilder( ConfigurationManager.AppSettings["WebSite"].ToString() + "Controladores/receiver.ashx");
            ub.Query = string.Format("filename={0}", fileName);
            WebClient c = new WebClient();
            c.OpenWriteCompleted += (sender, e) =>
            {
                PushData(data, e.Result);
                e.Result.Close();
                data.Close();

                Foto =  ConfigurationManager.AppSettings["WebSite"].ToString() +"Fotografias/"+ClienteSeleccionado.Id.ToString()+Status;
            };
            c.OpenWriteAsync(ub.Uri);
        }

        private void PushData(Stream input, Stream output)
        {
            byte[] buffer = new byte[4096];
            int bytesRead;

            while ((bytesRead = input.Read(buffer, 0, buffer.Length)) != 0)
            {
                output.Write(buffer, 0, bytesRead);
            }
        }
        private void AprobarCliente()
        {
            if (ClienteSeleccionado != null)
            {
                var listaValidaciones = ValidarEntidadConMetadata(ClienteSeleccionado);

                if (listaValidaciones.Count > 0)
                {
                    return;
                }
                Validar();
                if (ListaErrores.Count > 0)
                {
                    MostrarErrores = Visibility.Visible;
                    return;
                }
                ClienteSeleccionado.Estado = "PendientePago";
                ClienteSeleccionado.CaducidadSuscripcion = null;
                ClienteSeleccionado.NombresApellidos = ClienteSeleccionado.Nombres + " " + ClienteSeleccionado.Apellidos;
                ClienteSeleccionado.Foto = Foto;
                ClienteSeleccionado.FechaAprobacion = DateTime.Now;
                BiciqContexto.SubmitChanges().Completed += delegate
                {
                    //Action accion=Facturar;
                    LogicStudio.Framework.UI.Controles.CuadroDialogo.Mostrar("La Aprobación del cliente se ha realizado exitosamente", "Aprobación Exitosa", LogicStudio.Framework.UI.Utilidades.TipoVentana.Ok);
                    Buscar();
                };
            }
            else
            {
                LogicStudio.Framework.UI.Controles.CuadroDialogo.Mostrar("No se puede realizar Aprobación", "Debe seleccionar un Usuario para realizar la aprobación", LogicStudio.Framework.UI.Utilidades.TipoVentana.Advertencia);
            }
        }
        private void Validar()
        {
            InicializarMensajesError();
            if (PaisSeleccionado == null)
            {
                AgregarMensajeError("Debe seleccionar un País");
            }
            if (TipoSuscripcionSeleccionado == null)
            {
                AgregarMensajeError("Debe seleccionar un Tipo de Suscripción");
            }
        }
        private void Facturar()
        {
            if (ClienteSeleccionado != null)
            {
                Procesando = true;
                ClienteSeleccionado.NombresApellidos = ClienteSeleccionado.Nombres + " " + ClienteSeleccionado.Apellidos;
                ClienteSeleccionado.Foto = Foto;
                BiciqContexto.SubmitChanges().Completed += delegate
                {
                    Procesando = false;
                    FacturacionVista vista = new FacturacionVista();
                    FacturacionVistaModelo vistaModelo = new FacturacionVistaModelo(ClienteSeleccionado);
                    vista.DataContext = vistaModelo;
                    var Principal = (PrincipalVista)Application.Current.RootVisual;
                    Principal.LimpiarCanvas();
                    Principal.canvasBody.Content = vista;
                };

            }
            else
            {
                LogicStudio.Framework.UI.Controles.CuadroDialogo.Mostrar("No se puede Generar Tarjeta", "Debe seleccionar un Usuario para realizar la generación", LogicStudio.Framework.UI.Utilidades.TipoVentana.Advertencia);
            }

        }


        private void Actualizar()
        {
            Procesando = true;
            ClienteSeleccionado.NombresApellidos = ClienteSeleccionado.Nombres + " " + ClienteSeleccionado.Apellidos;
            ClienteSeleccionado.Foto = Foto;
            BiciqContexto.SubmitChanges().Completed += delegate
            {
                LogicStudio.Framework.UI.Controles.CuadroDialogo.Mostrar("La Actualización de Datos del cliente se ha realizado exitosamente", "Actualización Exitosa", LogicStudio.Framework.UI.Utilidades.TipoVentana.Ok);
                Buscar();
            };


        }
        private void BloquearInscripcion()
        {

            Action aceptar;
            aceptar = Bloquear;
            string titulo = "Bloquear - Dar de Baja Cliente";
            LogicStudio.Framework.UI.Controles.CuadroDialogo.Mostrar("Está Seguro de BLOQUEAR o DAR DE BAJA el cliente " + ClienteSeleccionado.NombresApellidos, titulo, LogicStudio.Framework.UI.Utilidades.TipoVentana.Confirmar, aceptar);

        }

        private void RechazarCliente()
        {
            var listaValidaciones = ValidarEntidadConMetadata(ClienteSeleccionado);

            if (listaValidaciones.Count > 0)
            {
                return;
            }
            Validar();
            if (ListaErrores.Count > 0)
            {
                MostrarErrores = Visibility.Visible;
                return;
            }

            Action aceptar;
            aceptar = Rechazar;
            string titulo = "Rechazar Cliente";
            LogicStudio.Framework.UI.Controles.CuadroDialogo.Mostrar("Está Seguro de RECHAZAR el cliente " + ClienteSeleccionado.NombresApellidos, titulo, LogicStudio.Framework.UI.Utilidades.TipoVentana.Confirmar, aceptar);

        }

        private void Bloquear()
        {
            _bloquearInscripcionVista = new BloquearInscripcionVista();
            _bloquearInscripcionVistaModelo = new BloquearInscripcionVistaModelo(ClienteSeleccionado);
            _bloquearInscripcionVista.DataContext = _bloquearInscripcionVistaModelo;

            _bloquearInscripcionVistaModelo.EventoCerrarEditor += delegate
            {
                 _bloquearInscripcionVista.Close();
            };
            _bloquearInscripcionVista.Show();
        }
        private void Rechazar()
        {

            ClienteSeleccionado.NombresApellidos = ClienteSeleccionado.Nombres + " " + ClienteSeleccionado.Apellidos;
            ClienteSeleccionado.Estado = "Rechazado";
            _rechazoClienteVista = new RechazoClienteVista();
            _rechazoClienteVistaModelo = new RechazoClienteVistaModelo(ClienteSeleccionado);
            _rechazoClienteVista.DataContext = _rechazoClienteVistaModelo;

            _rechazoClienteVistaModelo.EventoCerrarEditor += delegate
            {
                if (_rechazoClienteVistaModelo.IsDirty)
                {
                    BuscarRegistrados();
                }

                _rechazoClienteVista.Close();
            };

            _rechazoClienteVista.Show();

        }

        private void BuscarActivos()
        {
            Procesando = true;
            _estadoCliente = "Activo";
            TituloPanel = "Usuarios Activos";
            FondoPanel = "#FF4681E9";
            LetraPanel = "Black";
            MostrarGenerar = Visibility.Visible;
            if (CacheCliente.UsuarioLogueado.idRol.Value == Guid.Parse("CC832900-70F6-43FB-A0D1-703971BF62B8"))
            {
                MostrarReimprimirSC = Visibility.Visible;
            }
            else
            {
                MostrarReimprimirSC = Visibility.Collapsed;
            }
            MostrarAprobar = Visibility.Collapsed;
            MostrarFacturar = Visibility.Collapsed;
            MostrarActualizar = Visibility.Visible;
            Buscar();
        }

        private void BuscarAprobados()
        {
            Procesando = true;
            _estadoCliente = "PendientePago";
            TituloPanel = "Usuarios Aprobados";
            FondoPanel = "#FFB4B4B4";
            LetraPanel = "Black";
            MostrarGenerar = Visibility.Collapsed;
            MostrarAprobar = Visibility.Collapsed;
            MostrarFacturar = Visibility.Visible;
            MostrarActualizar = Visibility.Collapsed;
            MostrarReimprimirSC = Visibility.Collapsed;
            Buscar();
        }

        private void BuscarRechazados()
        {
            Procesando = true;
            _estadoCliente = "Rechazado";
            TituloPanel = "Usuarios Rechazados";
            FondoPanel = "#FFE9464F";
            LetraPanel = "Black";
            MostrarGenerar = Visibility.Collapsed;
            MostrarAprobar = Visibility.Visible;
            MostrarFacturar = Visibility.Collapsed;
            MostrarActualizar = Visibility.Collapsed;
            MostrarReimprimirSC = Visibility.Collapsed;
            Buscar();
        }

        private void BuscarRegistrados()
        {
            Procesando = true;
            _estadoCliente = "Registrado";
            TituloPanel = "Usuarios Registrados";
            FondoPanel = "#FF26D34F";
            LetraPanel = "Black";
            MostrarGenerar = Visibility.Collapsed;
            MostrarAprobar = Visibility.Visible;
            MostrarFacturar = Visibility.Collapsed;
            MostrarActualizar = Visibility.Collapsed;
            Buscar();
        }


        private void BuscarCaducados()
        {
            Procesando = true;
            _estadoCliente = "Caducado";
            TituloPanel = "Usuarios Caducados";
            FondoPanel = "#FFD3BA5A";
            LetraPanel = "Black";
            MostrarGenerar = Visibility.Collapsed;
            MostrarAprobar = Visibility.Collapsed;
            MostrarFacturar = Visibility.Visible;
            MostrarActualizar = Visibility.Collapsed;
            MostrarReimprimirSC = Visibility.Collapsed;
            Buscar();
        }


        private void VerHistorial()
        {

            _seguimientoVista = new SeguimientoChildVista();
            _seguimientoVistaModelo = new SeguimientoVistaModelo(ClienteSeleccionado);
            _seguimientoVista.DataContext = _seguimientoVistaModelo;

            _seguimientoVistaModelo.EventoCerrarEditor += delegate
            {
                _seguimientoVista.Close();

            };
            _seguimientoVista.Show();
        }
        #endregion
    }
}
